package com.veng.springbootdemo;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 发送者会发送给 交换机 exchange ，exchange 会根据绑定的路由算法来选择发送到各个队列
 * 路由算法有四种，direct topic Headers fanout.
 * direct 最简单就是根据全文匹配，
 * 队列跟交换机绑定 一个路由键 然后交换机 根据路由键，发送消息给队列
 * Direct：direct 类型的行为是”先匹配, 再投送”. 即在绑定时设定一个 routing_key, 消息的routing_key 匹配时, 才会被交换器投送到绑定的队列中去.
 * Topic：按规则转发消息（最灵活）
 * Headers：设置 header attribute 参数类型的交换机
 * Fanout：转发消息到所有绑定队列
 */
@Configuration
public class RabbitConfig {

    @Bean
    public Queue directQueue() {
        return new Queue("directQueue");
    }

    @Bean
    DirectExchange directExchange(){
        return new DirectExchange("directExchange");
    }

//    通过 路由键来 匹配

    @Bean
    Binding bindingDirect(){
        return BindingBuilder.bind(directQueue()).to(directExchange()).with("directRouting");
    }
}
